home *** CD-ROM | disk | FTP | other *** search
/ Express Pd: GALORE / Express Pd Galore - The Amiga PD & Shareware CD (1994)(Express Pd)[!][Amiga-CD32-CDTV].iso / productivity / term / libpanel.c < prev    next >
C/C++ Source or Header  |  1993-07-16  |  13KB  |  452 lines

  1. /*
  2. **    LibPanel.c
  3. **
  4. **    Editing panel for transfer library configuration
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_DEFAULT_LIB,GAD_SELECT_DEFAULT_LIB,
  13.         GAD_ASCII_UPLOAD_LIB,GAD_SELECT_ASCII_UPLOAD_LIB,GAD_BUILTIN_ASCII_UPLOAD,
  14.         GAD_ASCII_DOWNLOAD_LIB,GAD_SELECT_ASCII_DOWNLOAD_LIB,GAD_BUILTIN_ASCII_DOWNLOAD,
  15.         GAD_QUIET_TRANSFER,
  16.         GAD_TEXT_UPLOAD_LIB,GAD_SELECT_TEXT_UPLOAD_LIB,GAD_TEXT_DOWNLOAD_LIB,GAD_SELECT_TEXT_DOWNLOAD_LIB,
  17.         GAD_BINARY_UPLOAD_LIB,GAD_SELECT_BINARY_UPLOAD_LIB,GAD_BINARY_DOWNLOAD_LIB,GAD_SELECT_BINARY_DOWNLOAD_LIB,
  18.  
  19.         GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  20.  
  21. STATIC WORD Mappings[] =
  22. {
  23.     GAD_SELECT_DEFAULT_LIB,
  24.     GAD_SELECT_ASCII_UPLOAD_LIB,
  25.     GAD_SELECT_ASCII_DOWNLOAD_LIB,
  26.     GAD_SELECT_TEXT_UPLOAD_LIB,
  27.     GAD_SELECT_TEXT_DOWNLOAD_LIB,
  28.     GAD_SELECT_BINARY_UPLOAD_LIB,
  29.     GAD_SELECT_BINARY_DOWNLOAD_LIB,
  30.     -1
  31. };
  32.  
  33. STATIC WORD Strings[] =
  34. {
  35.     GAD_DEFAULT_LIB,
  36.     GAD_ASCII_UPLOAD_LIB,
  37.     GAD_ASCII_DOWNLOAD_LIB,
  38.     GAD_TEXT_UPLOAD_LIB,
  39.     GAD_TEXT_DOWNLOAD_LIB,
  40.     GAD_BINARY_UPLOAD_LIB,
  41.     GAD_BINARY_DOWNLOAD_LIB,
  42. };
  43.  
  44. STATIC struct Gadget *
  45. CreateAllGadgets(struct Configuration *Config,struct Gadget *GadgetArray[],struct Gadget **GadgetList,BYTE *Default)
  46. {
  47.     struct Gadget        *Gadget;
  48.     struct NewGadget     NewGadget;
  49.     UWORD             Counter = 0;
  50.  
  51.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  52.  
  53.     memset(&NewGadget,0,sizeof(struct NewGadget));
  54.  
  55.     if(Gadget = CreateContext(GadgetList))
  56.     {
  57.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_LIBPANEL_DEFAULT_TRANSFER_LIBRARY_GAD,MSG_LIBPANEL_BINARY_DOWNLOAD_LIBRARY_GAD));
  58.  
  59.         SZ_ResetMaxWidth();
  60.  
  61.         SZ_UpdateMaxWidth(STRING_KIND,NULL,30,NULL);
  62.  
  63.         SZ_SetWidth(SZ_ResetMaxWidth());
  64.  
  65.         NewGadget . ng_GadgetText    = LocaleString(MSG_LIBPANEL_DEFAULT_TRANSFER_LIBRARY_GAD);
  66.         NewGadget . ng_GadgetID        = Counter;
  67.  
  68.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  69.             SZ_Adjust,    TRUE,
  70.             SZ_AutoWidth,    TRUE,
  71.             SZ_LeaveFolder,    TRUE,
  72.  
  73.             GTST_MaxChars,    255,
  74.             GTST_String,    Config -> TransferConfig -> DefaultLibrary,
  75.         TAG_DONE);
  76.  
  77.         NewGadget . ng_GadgetID        = Counter;
  78.  
  79.         GadgetArray[Counter++] = Gadget = CreateGadget(FILE_KIND,Gadget,&NewGadget,
  80.             SZ_Adjust,    TRUE,
  81.             SZ_AutoWidth,    TRUE,
  82.             SZ_PlaceLeft,    TRUE,
  83.         TAG_DONE);
  84.  
  85.  
  86.         NewGadget . ng_GadgetText    = LocaleString(MSG_LIBPANEL_ASCII_UPLOAD_LIBRARY_GAD);
  87.         NewGadget . ng_GadgetID        = Counter;
  88.  
  89.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  90.             SZ_Adjust,    TRUE,
  91.             SZ_AutoWidth,    TRUE,
  92.             SZ_LeaveFolder,    TRUE,
  93.             SZ_AlignExtra,    TRUE,
  94.  
  95.             GTST_MaxChars,    255,
  96.             GTST_String,    Config -> TransferConfig -> ASCIIUploadLibrary,
  97.         TAG_DONE);
  98.  
  99.         NewGadget . ng_GadgetID        = Counter;
  100.  
  101.         GadgetArray[Counter++] = Gadget = CreateGadget(FILE_KIND,Gadget,&NewGadget,
  102.             SZ_Adjust,    TRUE,
  103.             SZ_AutoWidth,    TRUE,
  104.             SZ_PlaceLeft,    TRUE,
  105.         TAG_DONE);
  106.  
  107.         NewGadget . ng_GadgetText    = LocaleString(MSG_LIBPANEL_BUILTIN_ASCII_UPLOAD_GAD);
  108.         NewGadget . ng_GadgetID        = Counter;
  109.  
  110.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  111.             SZ_Adjust,    TRUE,
  112.             SZ_AutoWidth,    TRUE,
  113.  
  114.             GTCB_Checked,    Config -> TransferConfig -> InternalASCIIUpload,
  115.         TAG_DONE);
  116.  
  117.         NewGadget . ng_GadgetText    = LocaleString(MSG_LIBPANEL_ASCII_DOWNLOAD_LIBRARY_GAD);
  118.         NewGadget . ng_GadgetID        = Counter;
  119.  
  120.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  121.             SZ_Adjust,    TRUE,
  122.             SZ_AutoWidth,    TRUE,
  123.             SZ_LeaveFolder,    TRUE,
  124.  
  125.             GTST_MaxChars,    255,
  126.             GTST_String,    Config -> TransferConfig -> ASCIIDownloadLibrary,
  127.         TAG_DONE);
  128.  
  129.         NewGadget . ng_GadgetID        = Counter;
  130.  
  131.         GadgetArray[Counter++] = Gadget = CreateGadget(FILE_KIND,Gadget,&NewGadget,
  132.             SZ_Adjust,    TRUE,
  133.             SZ_AutoWidth,    TRUE,
  134.             SZ_PlaceLeft,    TRUE,
  135.         TAG_DONE);
  136.  
  137.         NewGadget . ng_GadgetText    = LocaleString(MSG_LIBPANEL_BUILTIN_ASCII_DOWNLOAD_GAD);
  138.         NewGadget . ng_GadgetID        = Counter;
  139.  
  140.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  141.             SZ_Adjust,    TRUE,
  142.             SZ_AutoWidth,    TRUE,
  143.  
  144.             GTCB_Checked,    Config -> TransferConfig -> InternalASCIIDownload,
  145.         TAG_DONE);
  146.  
  147.         NewGadget . ng_GadgetText    = LocaleString(MSG_LIBPANEL_QUIET_TRANSFER_GAD);
  148.         NewGadget . ng_GadgetID        = Counter;
  149.  
  150.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  151.             SZ_Adjust,    TRUE,
  152.             SZ_AutoWidth,    TRUE,
  153.  
  154.             GTCB_Checked,    Config -> TransferConfig -> QuietTransfer,
  155.         TAG_DONE);
  156.  
  157.  
  158.         NewGadget . ng_GadgetText    = LocaleString(MSG_LIBPANEL_TEXT_UPLOAD_LIBRARY_GAD);
  159.         NewGadget . ng_GadgetID        = Counter;
  160.  
  161.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  162.             SZ_Adjust,    TRUE,
  163.             SZ_AutoWidth,    TRUE,
  164.             SZ_LeaveFolder,    TRUE,
  165.             SZ_AlignExtra,    TRUE,
  166.  
  167.             GTST_MaxChars,    255,
  168.             GTST_String,    Config -> TransferConfig -> TextUploadLibrary,
  169.         TAG_DONE);
  170.  
  171.         NewGadget . ng_GadgetID        = Counter;
  172.  
  173.         GadgetArray[Counter++] = Gadget = CreateGadget(FILE_KIND,Gadget,&NewGadget,
  174.             SZ_Adjust,    TRUE,
  175.             SZ_AutoWidth,    TRUE,
  176.             SZ_PlaceLeft,    TRUE,
  177.         TAG_DONE);
  178.  
  179.         NewGadget . ng_GadgetText    = LocaleString(MSG_LIBPANEL_TEXT_DOWNLOAD_LIBRARY_GAD);
  180.         NewGadget . ng_GadgetID        = Counter;
  181.  
  182.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  183.             SZ_Adjust,    TRUE,
  184.             SZ_AutoWidth,    TRUE,
  185.             SZ_LeaveFolder,    TRUE,
  186.  
  187.             GTST_MaxChars,    255,
  188.             GTST_String,    Config -> TransferConfig -> TextDownloadLibrary,
  189.         TAG_DONE);
  190.  
  191.         NewGadget . ng_GadgetID        = Counter;
  192.  
  193.         GadgetArray[Counter++] = Gadget = CreateGadget(FILE_KIND,Gadget,&NewGadget,
  194.             SZ_Adjust,    TRUE,
  195.             SZ_AutoWidth,    TRUE,
  196.             SZ_PlaceLeft,    TRUE,
  197.         TAG_DONE);
  198.  
  199.  
  200.         NewGadget . ng_GadgetText    = LocaleString(MSG_LIBPANEL_BINARY_UPLOAD_LIBRARY_GAD);
  201.         NewGadget . ng_GadgetID        = Counter;
  202.  
  203.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  204.             SZ_Adjust,    TRUE,
  205.             SZ_AutoWidth,    TRUE,
  206.             SZ_LeaveFolder,    TRUE,
  207.             SZ_AlignExtra,    TRUE,
  208.  
  209.             GTST_MaxChars,    255,
  210.             GTST_String,    Config -> TransferConfig -> BinaryUploadLibrary,
  211.         TAG_DONE);
  212.  
  213.         NewGadget . ng_GadgetID        = Counter;
  214.  
  215.         GadgetArray[Counter++] = Gadget = CreateGadget(FILE_KIND,Gadget,&NewGadget,
  216.             SZ_Adjust,    TRUE,
  217.             SZ_AutoWidth,    TRUE,
  218.             SZ_PlaceLeft,    TRUE,
  219.         TAG_DONE);
  220.  
  221.         NewGadget . ng_GadgetText    = LocaleString(MSG_LIBPANEL_BINARY_DOWNLOAD_LIBRARY_GAD);
  222.         NewGadget . ng_GadgetID        = Counter;
  223.  
  224.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  225.             SZ_Adjust,    TRUE,
  226.             SZ_AutoWidth,    TRUE,
  227.             SZ_LeaveFolder,    TRUE,
  228.  
  229.             GTST_MaxChars,    255,
  230.             GTST_String,    Config -> TransferConfig -> BinaryDownloadLibrary,
  231.         TAG_DONE);
  232.  
  233.         NewGadget . ng_GadgetID        = Counter;
  234.  
  235.         GadgetArray[Counter++] = Gadget = CreateGadget(FILE_KIND,Gadget,&NewGadget,
  236.             SZ_Adjust,    TRUE,
  237.             SZ_AutoWidth,    TRUE,
  238.             SZ_PlaceLeft,    TRUE,
  239.         TAG_DONE);
  240.  
  241.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  242.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  243.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_DEFAULT_GAD),0,NULL);
  244.  
  245.         SZ_SetWidth(SZ_ResetMaxWidth());
  246.  
  247.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  248.         NewGadget . ng_GadgetID        = Counter;
  249.         NewGadget . ng_Flags        = 0;
  250.  
  251.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  252.             SZ_Adjust,    TRUE,
  253.             SZ_AutoWidth,    TRUE,
  254.             SZ_AlignExtra,    TRUE,
  255.             SZ_AlignLeft,    TRUE,
  256.             SZ_AlignBottom,    TRUE,
  257.         TAG_DONE);
  258.  
  259.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  260.         NewGadget . ng_GadgetID        = Counter;
  261.  
  262.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  263.             SZ_Adjust,    TRUE,
  264.             SZ_AutoWidth,    TRUE,
  265.             SZ_AlignRight,    TRUE,
  266.         TAG_DONE);
  267.  
  268.         if(Default)
  269.         {
  270.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_DEFAULT_GAD);
  271.             NewGadget . ng_GadgetID        = Counter;
  272.  
  273.             GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  274.                 SZ_Adjust,    TRUE,
  275.                 SZ_AutoWidth,    TRUE,
  276.                 SZ_AlignCentre,    TRUE,
  277.             TAG_DONE);
  278.         }
  279.     }
  280.  
  281.     return(Gadget);
  282. }
  283.  
  284. BYTE
  285. LibPanel(struct Configuration *Config,BYTE *Default)
  286. {
  287.     STATIC struct Gadget    *GadgetArray[GAD_DEFAULT + 1];
  288.     struct Gadget        *GadgetList = NULL;
  289.     struct Window        *PanelWindow;
  290.  
  291.     SaveConfig(Config,PrivateConfig);
  292.  
  293.     if(CreateAllGadgets(Config,GadgetArray,&GadgetList,Default))
  294.     {
  295.         if(PanelWindow = OpenWindowTags(NULL,
  296.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  297.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  298.             WA_Width,    SZ_GetWindowWidth(),
  299.             WA_Height,    SZ_GetWindowHeight(),
  300.  
  301.             WA_Activate,    TRUE,
  302.             WA_DragBar,    TRUE,
  303.             WA_DepthGadget,    TRUE,
  304.             WA_RMBTrap,    TRUE,
  305.             WA_DepthGadget,    TRUE,
  306.             WA_CloseGadget,    TRUE,
  307.             WA_CustomScreen,Window -> WScreen,
  308.  
  309.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | IDCMP_VANILLAKEY | BUTTONIDCMP | STRINGIDCMP,
  310.  
  311.             WA_Title,    LocaleString(MSG_LIBPANEL_LIBRARY_PREFERENCES_TXT),
  312.         TAG_DONE))
  313.         {
  314.             struct IntuiMessage    *Massage;
  315.             ULONG             IClass,Code;
  316.             struct Gadget        *Gadget;
  317.             BYTE             Terminated = FALSE;
  318.  
  319.             GuideContext(CONTEXT_LIBS);
  320.  
  321.             PushWindow(PanelWindow);
  322.  
  323.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  324.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  325.             GT_RefreshWindow(PanelWindow,NULL);
  326.  
  327.             ActiveGadget = NULL;
  328.  
  329.             ClrSignal(SIG_BREAK);
  330.  
  331.             while(!Terminated)
  332.             {
  333.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  334.                 {
  335.                     SaveConfig(PrivateConfig,Config);
  336.  
  337.                     break;
  338.                 }
  339.  
  340.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  341.                 {
  342.                     IClass    = Massage -> Class;
  343.                     Code    = Massage -> Code;
  344.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  345.  
  346.                     GT_ReplyIMsg(Massage);
  347.  
  348.                     KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&IClass,&Code);
  349.  
  350.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  351.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  352.  
  353.                     if(IClass == IDCMP_GADGETDOWN)
  354.                     {
  355.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  356.                             ActiveGadget = Gadget;
  357.                     }
  358.  
  359.                     if(IClass == IDCMP_CLOSEWINDOW)
  360.                     {
  361.                         SaveConfig(PrivateConfig,Config);
  362.  
  363.                         Terminated = TRUE;
  364.                     }
  365.  
  366.                     if(IClass == IDCMP_GADGETUP)
  367.                     {
  368.                         switch(Gadget -> GadgetID)
  369.                         {
  370.                             case GAD_USE:
  371.  
  372.                                 Terminated = TRUE;
  373.  
  374.                                 strcpy(Config -> TransferConfig -> DefaultLibrary,        SZ_GetString(GadgetArray[GAD_DEFAULT_LIB]));
  375.                                 strcpy(Config -> TransferConfig -> ASCIIUploadLibrary,        SZ_GetString(GadgetArray[GAD_ASCII_UPLOAD_LIB]));
  376.                                 strcpy(Config -> TransferConfig -> ASCIIDownloadLibrary,    SZ_GetString(GadgetArray[GAD_ASCII_DOWNLOAD_LIB]));
  377.                                 strcpy(Config -> TransferConfig -> TextUploadLibrary,        SZ_GetString(GadgetArray[GAD_TEXT_UPLOAD_LIB]));
  378.                                 strcpy(Config -> TransferConfig -> TextDownloadLibrary,        SZ_GetString(GadgetArray[GAD_TEXT_DOWNLOAD_LIB]));
  379.                                 strcpy(Config -> TransferConfig -> BinaryUploadLibrary,        SZ_GetString(GadgetArray[GAD_BINARY_UPLOAD_LIB]));
  380.                                 strcpy(Config -> TransferConfig -> BinaryDownloadLibrary,    SZ_GetString(GadgetArray[GAD_BINARY_DOWNLOAD_LIB]));
  381.  
  382.                                 Config -> TransferConfig -> InternalASCIIUpload    = SZ_GetChecked(GadgetArray[GAD_BUILTIN_ASCII_UPLOAD]);
  383.                                 Config -> TransferConfig -> InternalASCIIDownload    = SZ_GetChecked(GadgetArray[GAD_BUILTIN_ASCII_DOWNLOAD]);
  384.                                 Config -> TransferConfig -> QuietTransfer        = SZ_GetChecked(GadgetArray[GAD_QUIET_TRANSFER]);
  385.  
  386.                                 break;
  387.  
  388.                             case GAD_CANCEL:
  389.  
  390.                                 Terminated = TRUE;
  391.  
  392.                                 SaveConfig(PrivateConfig,Config);
  393.  
  394.                                 break;
  395.  
  396.                             case GAD_DEFAULT:
  397.  
  398.                                 *Default    = TRUE;
  399.  
  400.                                 Terminated    = TRUE;
  401.  
  402.                                 break;
  403.  
  404.                             default:
  405.                             {
  406.                                 WORD Picked = -1,i;
  407.  
  408.                                 for(i = 0 ; Picked == -1 && Mappings[i] != -1 ; i++)
  409.                                 {
  410.                                     if(Gadget -> GadgetID == Mappings[i])
  411.                                         Picked = i;
  412.                                 }
  413.  
  414.                                 if(Picked != -1)
  415.                                 {
  416.                                     BlockWindow(PanelWindow);
  417.  
  418.                                     strcpy(SharedBuffer,SZ_GetString(GadgetArray[Strings[Picked]]));
  419.  
  420.                                     if(PickFile("Libs:","xpr#?.library",LocaleString(MSG_LIBPANEL_SELECT_DEFAULT_TRANSFER_LIBRARY_TXT + Picked),SharedBuffer))
  421.                                     {
  422.                                         if(Stricmp(SharedBuffer,SZ_GetString(Gadget)))
  423.                                         {
  424.                                             GT_SetGadgetAttrs(GadgetArray[Strings[Picked]],PanelWindow,NULL,
  425.                                                 GTST_String,SharedBuffer,
  426.                                             TAG_DONE);
  427.                                         }
  428.                                     }
  429.  
  430.                                     ReleaseWindow(PanelWindow);
  431.                                 }
  432.  
  433.                                 break;
  434.                             }
  435.                         }
  436.                     }
  437.                 }
  438.             }
  439.  
  440.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  441.  
  442.             PopWindow();
  443.  
  444.             CloseWindow(PanelWindow);
  445.         }
  446.     }
  447.  
  448.     FreeGadgets(GadgetList);
  449.  
  450.     return((BYTE)memcmp(PrivateConfig -> TransferConfig,Config -> TransferConfig,sizeof(struct TransferSettings)));
  451. }
  452.